/**   
 * @Title: FreemarkerUtils.java 
 * @Package com.git.gather 
 * @Description: freemarker模板工具类
 * @author fanqinghui100@126.com   
 * @date 2014年6月12日 上午11:32:32 
 * @version V1.0   
 */
package com.git.gather.freemarker;

import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class FreemarkerUtils {
	private Configuration cfg = new Configuration();
	private Template template = null;
	private static final String UTF8 = "UTF-8";

	/**
	 * 以模板内容为参数构造模板工具<br>
	 * 创建一个新的实例 FreeMarkerUtils.
	 * 
	 * @param templateContent
	 */
	public FreemarkerUtils(String templateContent) {
		cfg.setTemplateLoader(new StringTemplateLoader(templateContent));
		cfg.setDefaultEncoding(UTF8);
		cfg.setOutputEncoding(UTF8);
		try {
			template = cfg.getTemplate("");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 以模板名称为参数构造模板工具，第二个参数为空即可。第一个参数为classpath下路径 创建一个新的实例 FreeMarkerUtils.
	 * 
	 * @param tplName
	 * @param type
	 */
	public FreemarkerUtils(String tplName, String type) {
		cfg.setDefaultEncoding(UTF8);
		cfg.setOutputEncoding(UTF8);
		// 设置模板文件所在的目录
		cfg.setClassForTemplateLoading(this.getClass(), "/");
		// 取得模板文件
		try {
			template = cfg.getTemplate(tplName);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public String getResult(Map<String, Object> root) {
		StringWriter writer = new StringWriter();
		// 在servlet中，输出流一定要从response中获取
		try {
			template.process(root, writer);
		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return writer.toString();
	}

	/** json data */
	public String getResult(String jsonData) throws Exception {
		Template template = cfg.getTemplate("");

		Map<String, Object> root = new HashMap<String, Object>();
		root.put("json", jsonData);
		StringWriter writer = new StringWriter();
		template.process(root, writer);
		return writer.toString();
	}

	/**
	 * map数据替换
	 * 
	 * @Title: getResultOfMap
	 * @return String 返回类型
	 * @throws
	 */
	public String getResultOfMap(Map<String, Object> root) throws Exception {
		// 在servlet中，输出流一定要从response中获取
		StringWriter writer = new StringWriter();
		template.process(root, writer);
		return writer.toString();
	}
}
